package ua.at.javac.server;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.TimeZone;

import ua.at.javac.client.GreetingService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;


/**
 * Серверная сторона реазилации RPC сервиса
 * @author Michael.Michaelovich, Cherry
 * @version 103
 * @since 2012

 */
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet 
implements GreetingService {
	/**
	 * Метод для динамической установки прокси-сервера 
	 * (использовать при необходимости)
	 * @param proxyName имя прокси-сервера (прокси-хост) 
	 * @param proxyPort порт подключения к прокси
	 */
	public void setConnect(String proxyName, String proxyPort){
		System.getProperties().setProperty("proxySet", "true");
		System.getProperties().setProperty("proxyHost", proxyName);
		System.getProperties().setProperty("proxyPort", proxyPort);
	}
	/**Метод получения данных из базы (вызывается из клиента
	 * при выборе города на левой панеле)
	 * @param строка с названием города
	 * @return возвращает коллекцию строковых массивов, где
	 * элемент коллекции - данные о погоде за один день,
	 * элемент массива коллекции - строка с одним погодным параметром
	 * (скор. ветра, темпер., влажн. и т.д.)
	 */
	public List<String[]> getWeather(String cityQuery)
	throws IllegalArgumentException {
			//setConnect("proxy", "3128");   		
			TimeZone tz = TimeZone.getTimeZone("Europe/Kiev");
			TimeZone.setDefault(tz);
			
			GregorianCalendar date = new GregorianCalendar();
			SimpleDateFormat formatter = 
					new SimpleDateFormat("yyyy-MM-dd");
			String upToDate;
			List<String[]> list = new ArrayList<String[]>();

		try {	 			
			ViewsDatabase db = new ViewsDatabase();
				upToDate = formatter.format(date.getTime());
				list.addAll(db.avgCityFile(upToDate, cityQuery));
				date.add(Calendar.DAY_OF_MONTH, 1);
			/*for (String[] f : list){
			for (int i = 0; i < f.length; i++)
				System.out.println(f[i]);
			}
			System.out.println(list);*/
			
		} catch (Exception e1) {
			
			e1.printStackTrace();
			System.out.println("Error connection to database !");
		}
		return list ;
	}
	
	/**Метод получения списка городов из базы (используется на клиенте
	 * для заполнения выпадающего списка)
	 * @return возвращает коллекцию строк (городов)
	 */
	public List<String> getListCity() throws Exception {
		//setConnect("proxy", "3128");
		System.out.println("Load metod getListCity()");
		List<String> testList = new ArrayList<String>();
		ViewsDatabase db = new ViewsDatabase();		
		testList.addAll(db.getListCity());
		for (String str : testList){
			System.out.println(str);
		}
		return testList;
	}
	
	/**Метод получения данных из базы (вызывается из клиента
	 * при выборе даты после выбранного города на левой панеле)
	 * @param строка с названием города
	 * @return возвращает коллекцию строковых массивов, где
	 * элемент коллекции - данные о погоде за один день,
	 * элемент массива коллекции - строка с одним погодным параметром
	 * по каждому серверу и другие погодные параметры
	 */
	public List<String[]> getExtendedWeather(String cityQuery, 
											 String dateQuery) {
		//setConnect("proxy", "3128");
		System.out.println("Дата:"+dateQuery+"   город:"+cityQuery);
		List<String[]> list = new ArrayList<String[]>();
	try {	 			
		ViewsDatabase db = new ViewsDatabase();
			list.addAll(db.avgSite(dateQuery, cityQuery));
			for (String[] f : list){
			for (int i = 0; i < f.length; i++){
				System.out.print("|/"+i+"/"+f[i]);
			}
			System.out.println();
			}
	} catch (Exception e1) {
		e1.printStackTrace();
		System.out.println("Error connection to database !");
	}
	return list ;
	}
	@Override
	public List<String> getListDate() throws Exception {
		//setConnect("proxy", "3128");
		System.out.println("Load metod getListDate()");
		List<String> testList = new ArrayList<String>();
		ViewsDatabase db = new ViewsDatabase();		
		testList.addAll(db.getListDate());
		for (String str : testList){
			System.out.println(str);
		}
		return testList;
	}
}